﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using LPrisaMVC.Entities;
using LPrisaMVC.BusinessLogic;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

namespace LPrisaMVC.WebMVC4.Controllers
{
    public class VentaController : Controller
    {
         public VentaController()
         {}

         [Dependency]
         public IProductoBL productoBL { get; set; }

        [Dependency]
        public IVentaBL ventaBL { get; set; }

        [Dependency]
        public IDetalleVentaBL detalleVentaBL { get; set; }

        [Authorize(Roles = "admin, ventas")]
        public ActionResult Index()
        {
            var _ventas = ventaBL.GetAllFromVentas();
            return View(_ventas);
        }

        [HttpPost]
        [Authorize(Roles = "admin, ventas")]
        public ActionResult Index(string clienteNom = "", string fec1 = "", string fec2 = "",
            bool fecha = false, bool general = false, bool boletas = false, bool facturas= false,
            bool porCliente = false, bool porFechas = false, bool clienteFechas = false)
        {
            try
            {
                var fecha1 = new DateTime();
                var fecha2 = new DateTime();

                if (fec1 == "" && fec2 == "")
                {
                    fecha1 = DateTime.Now.Date;
                    fecha2 = DateTime.Now.Date;
                }
                else
                {
                    fecha1 = Convert.ToDateTime(fec1);
                    fecha2 = Convert.ToDateTime(fec2);
                }
                var returnVentas = new List<VENTA>();

                if (fecha == true)
                {
                    var _ventas = ventaBL.GetFromVentabyClienteAndFecha(clienteNom,fecha1);
                    returnVentas = _ventas;
                }
                if (general == true)
                {
                    if(porCliente == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndCliente(null, null, clienteNom);
                        returnVentas = _ventas;
                    }
                    if(porFechas == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndCliente(fecha1, fecha2, "");
                        returnVentas = _ventas;
                    }
                    if(clienteFechas == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndCliente(fecha1, fecha2, clienteNom);
                        returnVentas = _ventas;
                    }
                }

                if (boletas == true)
                {
                    if(porCliente == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndClienteAndBoleta(null, null, clienteNom);
                        returnVentas = _ventas;
                    }
                    if(porFechas == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndClienteAndBoleta(fecha1, fecha2, "");
                        returnVentas = _ventas;
                    }
                    if(clienteFechas == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndClienteAndBoleta(fecha1, fecha2, clienteNom);
                        returnVentas = _ventas;
                    }
                }

                if (facturas == true)
                {
                    var FacturaT = true;
                    if(porCliente == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndClienteAndFactura(null, null, clienteNom, FacturaT);
                        returnVentas = _ventas;
                    }
                    if(porFechas == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndClienteAndFactura(fecha1, fecha2, "", FacturaT);
                        returnVentas = _ventas;
                    }
                    if(clienteFechas == true)
                    {
                        var _ventas = ventaBL.GetFromVentasbyFechaAndClienteAndFactura(fecha1, fecha2, clienteNom, FacturaT);
                        returnVentas = _ventas;
                    }                    
                }
                return View(returnVentas);
            }
            catch
            {
                var _ventas = ventaBL.GetAllFromVentas();
                return View(_ventas);
            }
        }

        public class Detalle_Ventas
        {
            public int VentaId { get; set; }
            public string ProductoName { get; set; }
            public decimal Cantidad { get; set; }
            public decimal Precio { get; set; }
            
        }

        public JsonResult GetDetalleVentaByVentaId(int id)
        {
            try 
            {
                var productosByVenta = detalleVentaBL.GetFromDetalleVentaByProductoDescAndVentaId(null, id);
                List<Detalle_Ventas> productosToView = new List<Detalle_Ventas>();
                foreach (var item in productosByVenta)
                {
                    var producto = productoBL.GetFromProductoById(item.ProductoId);

                    Detalle_Ventas Detalle_Ventas = new Detalle_Ventas();

                    Detalle_Ventas.VentaId = item.VentaId;
                    Detalle_Ventas.ProductoName = producto.Descripcion;
                    Detalle_Ventas.Cantidad = item.Cantidad;
                    Detalle_Ventas.Precio = item.Precio;
                    
                    productosToView.Add(Detalle_Ventas);
                }

                return Json(new {Results = productosToView }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                throw;
            }
        }


    }
}
